本节介绍分类数据的创建、分类的设置和是否有序的设置。[大谦Excel,dqexcel点com]
创建分类数据
【问题描述】
将Excel文件数据导入到DataFrame并将指定列转换为分类数据。
【示例8-1】
本例使用示例3-17的数据。用pandas导入Excel文件中第1个工作表中的数据,将“大小”列的数据类型转换为分类数据。
- 编写下面的代码:
import pandas as pd
# 读取Excel文件,引擎为"openpyxl"
df = pd.read_excel("D:/Samples/ch08/男裤库存.xlsx", engine="openpyxl")
# 将"大小"列转换为分类数据类型
df["大小"] = df["大小"].astype("category")
# 输出数据
print(df)
# 输出“大小”列的数据类型
print(df.dtypes["大小"])
打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,在IDLE Shell窗口输出数据。
>>> == RESTART: D:/Samples/1.py =
产品代码 颜色 大小 库存
0 A0001 白色 XL 30
1 A0001 白色 L 760
2 A0001 白色 M 357
3 A0001 白色 S 730
4 A0001 黑色 M 1520
5 A0001 黑色 L 666
6 A0002 白色 XXL 30
category
【知识点扩展】
本例用astype方法将DataFrame中一个列的数据类型指定为”category”,实现分类数据的创建。
也可以使用pandas的Categorical函数直接创建分类数据,例如:
>>> import pandas as pd
>>> cat=pd.Categorical(["XL", "L", "M", "S","M","L","XXL"])
>>> s=pd.Series(cat)
>>> s
0 XL
1 L
2 M
3 S
4 M
5 L
6 XXL
dtype: category
Categories(5, object): ['L', 'M', 'S', 'XL', 'XXL']
设置分类值
【问题描述】
设置分类数据的分类值。分类值指的是分类数据中的唯一值。
【示例8-2】
本例使用示例3-17的数据。用pandas导入Excel文件中第1个工作表中的数据,将“大小”列的数据类型转换为分类数据,分类的值包括:"S", "M", "L", "XL","XXL"。
- 编写下面的代码:
import pandas as pd
# 使用pandas读取Excel文件
df = pd.read_excel('D:/Samples/ch08/男裤库存.xlsx', engine='openpyxl')
# 将“大小”列转换为分类类型
df['大小'] = df['大小'].astype('category')
df['大小'].cat.categories = ['S', 'M', 'L', 'XL', 'XXL']
# 输出转换后的数据
print(df)
打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,在IDLE Shell窗口输出数据。
>>> == RESTART: D:/Samples/1.py =
产品代码 颜色 大小 库存
0 A0001 白色 XL 30
1 A0001 白色 L 760
2 A0001 白色 M 357
3 A0001 白色 S 730
4 A0001 黑色 M 1520
5 A0001 黑色 L 666
6 A0002 白色 XXL 30
【知识点扩展】
本例中用Series对象的cat.categories参数指定分类值,即
df['大小'].cat.categories = ['S', 'M', 'L', 'XL', 'XXL']
也可以在用Categorical函数创建分类数据时直接指定分类值,例如:
>>> import pandas as pd
>>> cat=pd.Categorical(["XL", "L", "M", "S","M","L","XXL"], categories = ['S', 'M', 'L', 'XL', 'XXL'])
>>> s=pd.Series(cat)
有序或无序
【问题描述】
指定分类数据中的值是否有序。
【示例8-3】
本例使用示例3-17的数据。用pandas导入Excel文件中第1个工作表中的数据,将“大小”列的数据类型转换为分类数据,分类的值包括:"S", "M", "L", "XL","XXL",大小顺序为:"S"<"M"<"L"<"XL"<"XXL"。根据“大小”列升序排序。
- 编写下面的代码:
import pandas as pd
# 导入Excel文件中第1个工作表中的数据,引擎为"openpyxl"
df = pd.read_excel("D:/Samples/ch08/男裤库存.xlsx", engine="openpyxl")
# 将“大小”列的数据类型转换为分类数据,分类的值包括:"S", "M", "L", "XL","XXL",大小顺序为:"S"<"M"<"L"<"XL"<"XXL"
size_categories = ["S", "M", "L", "XL", "XXL"]
df["大小"] = pd.Categorical(df["大小"], categories=size_categories, ordered=True)
# 根据“大小”列升序排序,输出数据
df_sorted = df.sort_values("大小")
print(df_sorted)
打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,在IDLE Shell窗口输出
>>> == RESTART: D:/Samples/1.py =
产品代码 颜色 大小 库存
3 A0001 白色 S 730
2 A0001 白色 M 357
4 A0001 黑色 M 1520
1 A0001 白色 L 760
5 A0001 黑色 L 666
0 A0001 白色 XL 30
6 A0002 白色 XXL 30
【知识点扩展】
本例使用pandas的Categorical函数创建分类数据,函数中ordered参数的值指定为True,表示分类数据的值是有序的,顺序为ategories参数指定的列表中元素的排列顺序。
指定分类数据的值有序后,就可以根据该列数据对行数据进行排序了。